#ifndef FDES_H_
#define FDES_H_

#include <openssl/des.h>

/**************** 宏定义 ****************/
#define MAX_KEY_LEN 24                        /* 最大密钥长度 */
#define MAX_COMMBUF 3*1024*1024                /* 最大加/解密数据长度 */

/**************** 函数定义 ****************/

/**********************************************************
 * 以 ECB 模式对 in_buf 中的数据执行3次 DES 加/解密，并将加/解密
 * 后的数据存入 out_buf 中。
 *
 * 参数：
 *     in_buf   - 待加/解密的数据缓冲区
 *     in_len   - 待加/解密的数据长度（字节）
 *     out_buf  - 加/解密后的结果数据缓冲区
 *     out_len  - 加/解密后的结果数据长度（字节）
 *     key_buf  - 加/解密的密钥数据缓冲区
 *     key_len  - 加/解密的密钥数据长度（字节）
 *     mode     - 操作模式（0 解密，1 加密）
 * 返回值：
 *     0    - 加/解密数据成功
 *     -1   - 加/解密数据失败
 **********************************************************/
int tdes_ecb(unsigned char *in_buf, long in_len,
        unsigned char *out_buf, long *out_len,
        unsigned char *key_buf, int key_len,
        int mode);

/**********************************************************
 * 从文件 fname 中读取密钥数据到 key_buf 中，并将读取的密钥大小存
 * 入 key_len 指针变量。
 *
 * 参数：
 *     fname    - 存放密钥数据的文件名
 *     key_buf  - 读取密钥后存放的密钥数据缓冲区
 *     key_len  - 读取密钥后存放的密钥长度
 * 返回值：
 *     0    - 读取密钥成功
 *     -1   - 读取密钥失败
 **********************************************************/
int read_key(char *fname, unsigned char *key_buf, int *key_len);

#endif /* FDES_H_ */
